// 用于调度优化
import { nextTick } from "./utils/index";

// 存放watcher的队列
let query = [];
let has = {};

// 清空队列
function flushQuery() {
	// 执行队列中的watcher更新页面,异步一次性更新
	query.forEach((item) => {
		item.run();
	});
	// 清空队列,让下一次更新可以继续使用
	query = [];
	// 清空对象
	has = {};
}

// 异步更新页面
export function queryWatcher(watcher) {
	const { id } = watcher;
	// 判断has对象上属性名为当前watcher的id的值是不是为null
	if (!has[id]) {
		query.push(watcher);
		// 让has上该属性的值不为null
		has[id] = true;
		// 异步执行方法
		nextTick(flushQuery);
	}
}
